<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>复习</title>
</head>
<body>
一、数据类型
    数据分类
        基本(值)类型：string number boolean null definend
                    任意字符串
                    任意值
                    true/false
                    null
                    definend
        引用(对象)类型：object(任意对象)
                    特殊: function/array
                        特别的对象(可执行的)
                        内部数据是有序的(通过数值下标获取)
    判断某个数据的类型
        typeof：返回数据类型的字符串表达式(字符串代表它对应的数据类型)number/string/boolean/undefined/function
                不能区别object和null object和Array
        instanceof：判断对象的具体值
        ===: 只能判断null/definend(因为这两个类型只有一个值)
    相关逻辑问题
        1. undefined和null
        2. 什么时候赋值null
        3. 严格数据类型
二、数据、变量和内存
    数据：存储在内存中的东东010001101，代表特定信息
        可读写、可传递、可运算(具体看数据类型)
        一切皆数据(函数、对象...)
        可运算：算术运算，逻辑运算、赋值运算、调用函数传参(实参(数据，变量的值)和形参(变量，局部的))
    变量：一个数据在内存中的标识，有变量名+变量值组成
    内存：一个临时的存储空间，通电--读取--断电--数据没了
        分配内存：var a = 1; new obj(); function a(){}
        释放内存：
            全局变量：貌似通过赋值为null来增加内存空间(优化)
            局部变量：函数执行完后
            对象：成为垃圾对象(没有一个引用指向的时候，如a=null)--由垃圾回收器回收(在程序后面的某个时刻被回收)
        内存分类：
            栈：全局和局部变量(空间较小)
            堆：对象(空间较大)
    关系：内存一个容器，变量内存的标识，根据标识读写内存中的数据
        写：就是赋值，变量名在=号左边
        读：那就多了
    var a = xxx
                xxx: 数据
                    对象
                    变量(数据/对象)
    两个引用变量同时指向同一个对象：
                            对象：{age: 12}
                            a
                            b
            注：函数值传递的问题在这里需理清；赋值：a = b，是b被赋值给了a
三、对象
    什么是对象：人就是一个对象，他有名字，年龄，身高，就是对着的一个抽象理解
                也可以说就是多个数据的封装体，就是个容器
    为啥要用：相对于变量可以统一的管理多个数据
    组成：
        属性(状态数据)：对象名 = {属性名：'属性值(任意类型)'}；
        方法(行为数据)：对象名 = {方法名:function(){逻辑}
    访问：
        属性名：简单，特殊情况不能使用
        ['属性名']：
                属性名中有特殊字符-号和空格
                属性名是变量(就是不确定)
        读：对象名.属性名
        取：对象名.属性名 = '值'

四、函数
    什么是函数：多条语句的封装体，执行后才能用
    为啥要用：减少代码复用、便于代码阅读(好维护)
    定义：var a = function(){}/function a(){}
    执行(调用)：
        test();
        p.test();
        new test();
        test.call/apply(obj);
    回调函数：
        1. 自己定义的
        2. 没用调用
        3. 最终它自动执行了(需满足某个特定条件)
        分类：dom事件回调函数/定时器回调函数
        问：回调函数的this是谁？？？
            发生事件的dom元素(用户操作)/就是window

五、IIFE立即调用函数表达式(匿名函数自调用)
    作用：隐藏内部实现/不污染外部空间(全局)

六、函数中的this
    test(); window
    p.test(); p
    p.call/apply(obj); obj
    new test(); 新创建的对象
</body>
</html>